# 介绍

Lambda表达式的出现解决了内部类代码过于冗余的问题,并且为了Lambda表达式的使用方便,从JDK1.8开始,支持方法内内部类可以直接访问方法参数

Lambda是一种函数式编程

# 问题

没有Lambda表达式前的匿名内部类,匿名类的核心语句只有一行,但是不得不编写其他冗余的代码








 





interface MessageI {
    public void send(String msg);
}

public static void main(String[] args) {
    MessageI myMsg = new MessageI() {
        public void send(String msg) {
            System.out.println(msg);
        }
    }
    myMsg.send("Hello");
}
1
2
3
4
5
6
7
8
9
10
11
12

# 使用Lambda表达式

public static void main(String[] args) {
    MessageI myMsg = (msg) -> {
        System.out.println(msg);
    };
    myMsg.send("Hello");
}
1
2
3
4
5
6

# Lambda表达式使用

1. 编写多行语句

(n1, n2) -> {
    int n3 = n1 + n2;
    n3 = n3 + 1;
    return n3;
};
1
2
3
4
5

2. 编写单行返回语句

(n1, n2) -> n1 + n2;
1

注意

使用函数式编程的前提,一个接口只允许有一个抽象方法
如果出现其他方法,只能是default或者static方法

可以使用注解@FunctionalInterface防止定义多个抽象方法

@FunctionalInterface
interface MessageI {
    public void send(String msg);
}
1
2
3
4

# 参考

[1] 阿里云大学 | 李兴华 - Java语言基础 (opens new window)

Last Updated: 7/1/2020, 2:19:02 AM